import { defineConfig } from 'eslint/config'
import js from '@eslint/js'
import globals from 'globals'
import vuePlugin from 'eslint-plugin-vue'
import importPlugin from 'eslint-plugin-import'
import prettierPlugin from 'eslint-plugin-prettier'
import prettierConfig from 'eslint-config-prettier'

/**
 * ESLint 配置文件 (采用新的扁平化配置格式)
 * 注意：此配置需要 ESLint v8.x 及以上版本
 */
export default defineConfig([
	// ==================== 基础JS配置 ====================
	// 使用 @eslint/js 提供的推荐JS规则
	js.configs.recommended,

	// ==================== Vue专用配置 ====================
	// 应用Vue.js的基本规则集
	...vuePlugin.configs['flat/essential'],

	// ==================== 主配置 ====================
	{
		// 应用文件类型
		files: ['**/*.{js,mjs,cjs,vue}'],

		// 插件配置
		plugins: {
			vue: vuePlugin, // Vue.js语法支持
			import: importPlugin, // import/export语法检查
			prettier: prettierPlugin // Prettier集成
		},

		// 语言环境配置
		languageOptions: {
			// 全局变量
			globals: {
				...globals.browser, // 浏览器环境全局变量
				GC: true, // 自定义全局变量
				GCMap: true // 自定义全局变量
			}
		},

		// 自定义规则
		rules: {
			// ES6+规则
			'no-var': 'error', // 禁止使用var
			'prefer-const': 'error', // 建议使用const

			// 代码风格规则
			'object-curly-spacing': ['error', 'always'], // 对象大括号内加空格
			'comma-dangle': ['error', 'never'], // 禁止末尾逗号
			semi: ['error', 'never'], // 禁止分号

			// Vue规则
			'vue/multi-word-component-names': [
				'error',
				{
					ignores: ['index'] // 允许index.vue单单词组件名
				}
			],

			// Import规则
			'import/order': 'error', // 强制import排序
			'import/first': 'error', // import必须在文件顶部
			'import/newline-after-import': 'error', // import后空行

			// Prettier集成
			'prettier/prettier': [
				'error',
				{
					semi: false, // 无分号
					tabWidth: 2, // 缩进2空格
					useTabs: true, // 使用制表符
					singleQuote: true, // 使用单引号
					printWidth: 120, // 行宽120
					trailingComma: 'none', // 无末尾逗号
					bracketSameLine: true, // 标签右括号同行
					proseWrap: 'preserve', // 文档块换行保留
					vueIndentScriptAndStyle: true, // Vue文件缩进script/style
					singleAttributePerLine: false // 不强制单属性每行
				}
			]
		}
	},

	// ==================== Prettier配置 ====================
	// 必须放在最后，禁用与Prettier冲突的规则
	{
		...prettierConfig,
		files: ['**/*.{js,mjs,cjs,vue}']
	}
])

/**
 * 使用说明：
 * 1. 确保已安装所有依赖：
 *    npm install --save-dev @eslint/js eslint-plugin-vue eslint-plugin-import eslint-plugin-prettier eslint-config-prettier globals
 *
 * 2. 运行检查：
 *    npx eslint src/
 *
 * 3. 自动修复：
 *    npx eslint src/ --fix
 *
 * 4. 配合Prettier使用：
 *    npx prettier --write src/
 */
